/*

//调用示例------
Find_Controls(data,click_type);

其中data为必填参数，click_type为可选填参数
click_type 可选填参数有三种值{
    1 表示 在控件范围内随机坐标点击(请确保控件在屏幕可见)
    2 表示 直接点击控件
    新增功能 (data为字符串或数组时忽略clickable值进行点击)
    3 或>3 表示 只判断查找控件是否存在，不进行任何点击
    不填click_type，则默认该参数为1
    }

data 为字符串时{
   如： Find_Controls("我的钱包",2);
    表示查找与"通讯录"有关的控件
    找到则进行控件点击(忽略clickable值)
    并返回true，没有找到则返回false;
    }
    
data 为数组时{
    如：Find_Controls(["我的钱包","通讯录"],3);
    表示按数组顺序查找有关有关字符串的控件
    找到一个返回true，不点击
    一个也没有找到则返回false;
    }
    cli
    
data 为对象时{
   如： Find_Controls({
       xzq:'textContains("通讯录").depth(12)'
       },1);
    表示查找与选择器
    textContains为"通讯录"，depth为12有关的控件
    找到则在控件范围内随机点击
    并返回true，没有找到则返回false;
    }
    
    
*/

//示范
launchApp("微信");
sleep(1500);

//找到数组内元素相关的控件，并进行控件范围内随机点击
toastLog(Find_Controls(["通讯录啊", "卧槽", "通讯录"]));


//封装函数-----起始
function Find_Controls(data, click_type) {
    click_type = click_type || 1;
    let A_解析_传入类型_ = Object.prototype.toString.call(data) === '[object Object]' ? "对象" : Object.prototype.toString.call(data) === '[object Array]' ? "数组" : Object.prototype.toString.call(data) === '[object String]' ? "字符串" : false; //true)
    switch (A_解析_传入类型_) {
        case "对象":
            log("传入参数为对象格式");
            result = find_xzq(data);
            result ? log("找到「" + data + "」相关控件") : log("没有找到「" + data + "」相关控件");
            return result;
        case "数组":
            log("传入参数为数组格式");
            for (let v of data) {
                result = find(v);
                if (result) {
                    //找到其中一个就退出
                    break;
                }
            }
            result ? log("找到「" + data + "」相关控件") : log("没有找到「" + data + "」相关控件");
            return result;
        case "字符串":
            log("传入参数为字符串格式");

            result = find(data);
            result ? log("找到「" + data + "」相关控件") : log("没有找到「" + data + "」相关控件");
            return result;

        case false:
            toastLog("传入参数有误");
            return false;
    }

    function find(str) {
        try {
            let visible = click_type == 1 ? "visibleToUser(true)." : "";
            bounds = eval(visible + "descContains(str).findOne(1)");
            bounds == null ? bounds = eval(visible + "textContains(str).findOne(1)") : 0;
            try {
                click_type == 1 ? click(random(bounds.bounds().left, bounds.bounds().right), random(bounds.bounds().top, bounds.bounds().bottom)) : click_type == 2 ? click(bounds.desc()) : 0;
            } catch (e) {
                click_type == 1 ? click(random(bounds.bounds().left, bounds.bounds().right), random(bounds.bounds().top, bounds.bounds().bottom)) : click_type == 2 ? click(bounds.text()) : 0;
            }
            if (bounds == null && click_type > 2) {
                text("--qwertyuii故意出错--").findOne(1).click();
            }
            return true;
        } catch (e) {
            return false;
        }
    }

    function find_xzq() {
        try {
            let bounds = eval(data.xzq + ".findOne(1)");
            click_type == 1 ? click(random(bounds.bounds().left, bounds.bounds().right), random(bounds.bounds().top, bounds.bounds().bottom)) : click_type == 2 ? bounds.click() : 0;
            if (bounds == null && click_type > 2) {
                text("--qwertyuii故意出错--").findOne(1).click();
            }
            return true;
        } catch (e) {
            return false;
        }
    }
}

//封装函数-----结束